using System;
using EnvDTE;

namespace NUnitGenAddIn.VS2008.Test
{
    /// <summary>
    /// Mock Code Class 2008
    /// </summary>
    internal class MockCodeClass2008 : MockCodeElement2008, CodeClass
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeClass2008"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        public MockCodeClass2008(string name) : base(name)
        {}

        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeClass2008"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="children">The children.</param>
        public MockCodeClass2008(string name, CodeElements children) : base(name, children)
        {}

        /// <summary>
        /// Gets the kind.
        /// </summary>
        /// <value>The kind.</value>
        public override vsCMElement Kind
        {
            get { return vsCMElement.vsCMElementClass; }
        }

        #region CodeClass Members

        /// <summary>
        /// Gets or sets the access.
        /// </summary>
        /// <value>The access.</value>
        public vsCMAccess Access
        {
            get { throw new Exception("The method or operation is not implemented."); }
            set { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Adds the attribute.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="value">The value.</param>
        /// <param name="position">The position.</param>
        /// <returns></returns>
        public CodeAttribute AddAttribute(string name, string value, object position)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the Base.
        /// </summary>
        /// <param name="Base">The base.</param>
        /// <param name="position">The position.</param>
        /// <returns></returns>
        public CodeElement AddBase(object Base, object position)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeClass AddClass(string name, object position, object bases, object implementedInterfaces, 
                                  vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the delegate.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeDelegate AddDelegate(string name, object type, object position, vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the enumerator.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeEnum AddEnum(string name, object position, object bases, vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the function.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="kind">The kind.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="location">The location.</param>
        /// <returns></returns>
        public CodeFunction AddFunction(string name, vsCMFunction kind, object type, object position, 
                                        vsCMAccess access, object location)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the implemented interface.
        /// </summary>
        /// <param name="Base">The base.</param>
        /// <param name="position">The position.</param>
        /// <returns></returns>
        public CodeInterface AddImplementedInterface(object Base, object position)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the property.
        /// </summary>
        /// <param name="getterName">Name of the getter.</param>
        /// <param name="putterName">Name of the putter.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="location">The location.</param>
        /// <returns></returns>
        public CodeProperty AddProperty(string getterName, string putterName, object type, object position, 
                                        vsCMAccess access, object location)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the structure.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeStruct AddStruct(string name, object position, object bases, object implementedInterfaces,
                                    vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the variable.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="location">The location.</param>
        /// <returns></returns>
        public CodeVariable AddVariable(string name, object type, object position, vsCMAccess access, object location)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Gets the attributes.
        /// </summary>
        /// <value>The attributes.</value>
        public CodeElements Attributes
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets the bases.
        /// </summary>
        /// <value>The bases.</value>
        public CodeElements Bases
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets or sets the comment.
        /// </summary>
        /// <value>The comment.</value>
        public string Comment
        {
            get { throw new Exception("The method or operation is not implemented."); }
            set { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets the derived types.
        /// </summary>
        /// <value>The derived types.</value>
        public CodeElements DerivedTypes
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets or sets the doc comment.
        /// </summary>
        /// <value>The doc comment.</value>
        public string DocComment
        {
            get { throw new Exception("The method or operation is not implemented."); }
            set { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets the implemented interfaces.
        /// </summary>
        /// <value>The implemented interfaces.</value>
        public CodeElements ImplementedInterfaces
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets or sets a value indicating whether this instance is abstract.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is abstract; otherwise, <c>false</c>.
        /// </value>
        public bool IsAbstract
        {
            get { throw new Exception("The method or operation is not implemented."); }
            set { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets the members.
        /// </summary>
        /// <value>The members.</value>
        public CodeElements Members
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets the Namespace.
        /// </summary>
        /// <value>The Namespace.</value>
        public CodeNamespace Namespace
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets the parent.
        /// </summary>
        /// <value>The parent.</value>
        public new object Parent
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Removes the base.
        /// </summary>
        /// <param name="element">The element.</param>
        public void RemoveBase(object element)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Removes the interface.
        /// </summary>
        /// <param name="element">The element.</param>
        public void RemoveInterface(object element)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Removes the member.
        /// </summary>
        /// <param name="element">The element.</param>
        public void RemoveMember(object element)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Get_s the is derived from.
        /// </summary>
        /// <param name="fullName">The full name.</param>
        /// <returns></returns>
        public bool get_IsDerivedFrom(string fullName)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion
    }
}